home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / mach / amiga / scsi9091.lzh / scsi.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-02-19  |  3.1 KB  |  132 lines

  1. /* write access to registers 40/42 */
  2. /* register 42: */
  3. #define HCBP        128
  4. #define MRESET        64
  5. #define SEL_ST506    0
  6. #define SEL_SCSI    32
  7. #define INT_ENABLE    16
  8.  
  9. /* read access to registers 40/42 */
  10. /* register 40: */
  11. #define INT_FOLLOW    128
  12. #define INT2_PENDING    16
  13. /* register 42: */
  14. #define CCBP        128
  15.  
  16. #define A2090_CNTL_LO    0x40
  17. #define A2090_CNTL_HI    0x42
  18. #ifdef A2090
  19. #define SCSI_CS_CNTL    0x60
  20. #define SCSI_CS_DATA    0x62
  21. #endif
  22. #ifdef A2091
  23. #define SCSI_CS_CNTL    0x91
  24. #define SCSI_CS_DATA    0x93
  25. #endif
  26. #ifdef A3000
  27. #define SCSI_CS_CNTL    0x41
  28. #define SCSI_CS_DATA    0x43
  29. #endif
  30. #ifdef A2090
  31. /* not used but on the 2090 */
  32. #define SCSI_PCSS    0x64
  33. #define SCSI_PCSD    0x68
  34. #endif
  35.  
  36. #ifdef A2090
  37. /* the maximum memory block the 2090 DMA circuit can fill with one
  38.  * operation.
  39.  */
  40. #define DMA_MAX_TRANSFER 64*1024
  41. #endif
  42. #ifdef A2091
  43. /* seems there is no such limit... GREAT! */
  44. #define DMA_MAX_TRANSFER (ulong)~0
  45. #endif
  46.  
  47.  
  48. #ifdef A2090
  49. /* DMA states */
  50. #define DMA_LD_UP_ADDR    0xfb
  51. #define DMA_LD_MID_ADDR    0xfd
  52. #define DMA_LD_LO_ADDR    0xf6    /* loads low latch and starts dma */
  53. #define DMA_OPEN_FIFO    0xf7
  54. #define DMA_READ_STATUS    0xef
  55. #define DMA_RESET_1    0x7f
  56. #define DMA_RESET_2    0xff
  57. #endif
  58.  
  59. /* wd register names */
  60. #define WD_OWN_ID        0x00
  61. #define WD_CONTROL        0x01
  62. #define WD_TIMEOUT_PERIOD    0x02
  63. #define WD_CDB_1        0x03
  64. #define WD_CDB_2        0x04
  65. #define WD_CDB_3        0x05
  66. #define WD_CDB_4        0x06
  67. #define WD_CDB_5        0x07
  68. #define WD_CDB_6        0x08
  69. #define WD_CDB_7        0x09
  70. #define WD_CDB_8        0x0a
  71. #define WD_CDB_9        0x0b
  72. #define WD_CDB_10        0x0c
  73. #define WD_CDB_11        0x0d
  74. #define WD_CDB_12        0x0e
  75. #define WD_TARGET_LUN        0x0f
  76. #define WD_COMMAND_PHASE    0x10
  77. #define WD_SYNCHRONOUS_TRANSFER    0x11
  78. #define WD_TRANSFER_COUNT_MSB    0x12
  79. #define WD_TRANSFER_COUNT    0x13
  80. #define WD_TRANSFER_COUNT_LSB    0x14
  81. #define WD_DESTINATION_ID    0x15
  82. #define WD_SOURCE_ID        0x16
  83. #define WD_SCSI_STATUS        0x17
  84. #define WD_COMMAND        0x18
  85. #define WD_DATA            0x19
  86. #define WD_AUXILIARY_STATUS    0x1f
  87.  
  88. /* wd commands */
  89. #define WD_CMD_RESET        0x00
  90. #define WD_CMD_ABORT        0x01
  91. #define WD_CMD_ASSERT_ATN    0x02
  92. #define WD_CMD_NEGATE_ACK    0x03
  93. #define WD_CMD_DISCONNECT    0x04
  94. #define WD_CMD_RESELECT        0x05
  95. #define WD_CMD_SELECT_WITH_ATN            0x06
  96. #define WD_CMD_SELECT_WITHOUT_ATN        0x07
  97. #define WD_CMD_SELECT_WITH_ATN_AND_TRANSFER    0x08
  98. #define WD_CMD_SELECT_WITHOUT_ATN_AND_TRANSFER    0x09
  99. #define WD_CMD_RESELECT_AND_RECEIVE_DATA    0x0a
  100. #define WD_CMD_RESELECT_AND_SEND_DATA        0x0b
  101. #define WD_CMD_WAIT_FOR_SELECT_AND_RECEIVE    0x0c
  102. #define WD_CMD_TRANSLATE_ADDRESS    0x18
  103. #define WD_CMD_TRANSFER_INFO        0x20
  104. #define WD_CMD_TRANSFER_PAD        0x21
  105. #define WD_CMD_SBT_MODE            0x80
  106.  
  107. /* values for "direction" */
  108. #define DIRECTION_READ    1
  109. #define DIRECTION_WRITE    0
  110.  
  111. typedef unsigned char ubyte;
  112. typedef unsigned short ushort;
  113. typedef unsigned long ulong;
  114.  
  115. #include <devices/scsidisk.h>
  116.  
  117. struct scsi_msg {
  118.   struct Message scm_message;
  119.   ubyte  scm_unit;
  120.     /*
  121.      * scm_cmd (in): either SCM_CMD_EXEC_SCSI (execute this message's
  122.      *         scm_scsi_cmd on unit scm_unit).
  123.      *          or SCM_CMD_SHUTDOWN (shutdown handler task).
  124.      * scm_cmd (out):io_Error to be returned, if SCM_CMD_EXEC_SCSI
  125.      */
  126.   ubyte  scm_cmd;
  127.   struct SCSICmd *scm_scsi_cmd;
  128. };
  129.  
  130. #define SCM_CMD_EXEC_SCSI 1
  131. #define SCM_CMD_SHUTDOWN  2
  132.